#ifndef EPOINT_H
#define EPOINT_H

#include <QtGui> // SERIALIZZAZIONE
#include "sap.h"

class EPoint
{
public:
    enum erif {RIF_ED50 = 10, RIF_WGS84 = 20};
	enum err {ERR_NONE = 0, ERR_EPOINT_NULL = 1, ERR_GENERIC};
	EPoint();  // Costruttore di default (riferimento WGS84 di default)
	EPoint(const EPoint& p); // Costruttore di copia
	EPoint & operator=(const EPoint& p); // Operatore di assegnamento
	EPoint(const double& lon, const double& lat, const int& rif);


	 void set_lon (const double& val);
	 void set_lat (const double& val);
	 void set_rif (const int& tprif);
	 virtual void setNull (void);
	 void setNull_lon (void);
	 void setNull_lat (void);

	 bool isNull (void) const;
	 bool isNull_lon (void) const;
	 bool isNull_lat (void) const;
	  double lon (void) const;
	  double lat (void) const;
		 int rif (void) const;
	 double dist(const EPoint& from, int& err) const;

private:
	double  m_lon_ED50 ; // longitudine decimale in sistema ED50
	double  m_lat_ED50 ; // latitudine decimale in sistema ED50
	double m_lon_WGS84 ; // longitudine decimale in sistema WGS84
	double m_lat_WGS84 ; // latitudine decimale in sistema WGS84
			erif m_rif ; // sistema di riferimento corrente

	bool m_isNull_lon ;
	bool m_isNull_lat ;

	double arcInRadians_WGS84 (const EPoint& from) const;
	double distanceInMeters_WGS84 (const EPoint& from) const;

};

Q_DECLARE_METATYPE( EPoint ) // SERIALIZZAZIONE

#endif // EPOINT_H
